/**
//文档生成日期：2005.10.07
//
//(1)概述：
//类名称：RssFeedList
//类说明：
//??	 “Rss Feed列表”的Form界面
* 
//所在子系统：RssOwlMIDlet
//
//系统总描述:
	    我们提供的RSS无线阅读器J2ME版本[开源]是一个可以下载到手机(例如Nokia7610)或者其他无线手持设备(例如PocketPC)的应用程序，用来阅读存在于Internet中广泛的RSS新闻源。

	 子系统描述：
		RSS无线阅读器的功能列表：
	RSS Feed列表
		添加Rss Feed
		编辑Rss Feed
		删除Rss Feed
	读取Rss Feed新闻
		查看新闻摘要
		重新读取Rss Feed新闻
	关于我


//(2)历史记录:
//创建人: 郑昀(2005.10.07)
//联系我: Google Talk >> zhengyun@gmail.com
//Blogs:    http://blog.csdn.net/zhengyun_ustc/以及http://www.cnblogs.com/zhengyun_ustc

//(3)版权声明:
//由于我这个版本的RSS J2ME阅读器也是基于Tommi和garrey源代码基础上改编而来的，
//所以决定遵照GPL协议的大意开放源代码，您可以自由传播和修改，在遵照GPL协议的约束条件的前提下。

//(4)相关资源:
1：《[J2ME]RSSOwlMidlet(RSS无线阅读器)开源说明》
2：《[J2ME]RSSOwlMidlet(RSS无线阅读器)设计说明》
3：下载源代码：

////////////////////////////////////////////////////////////////////*/
package com.zemo.view;

import java.util.Vector;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.List;

import com.zemo.control.GUIController;
import com.zemo.model.RssFeed;
import com.zemo.model.RssItem;
import com.zemo.tools.SResources;

/**********************************************************
//RssFeedList
//
//Class Description:
//	显示当前所有的Rss Feed书签,以名称列表方式显示。提供菜单命令有：
 *   读取新闻
 *   添加书签
 *   编辑书签
 *   删除书签
 *   关于我
//
//Author:
//zhengyun@zemo 2005.10.07
//
**********************************************************/
public class RssFeedList extends javax.microedition.lcdui.List{
    private GUIController 	 controller;
    private Command EXIT_COMMAND;
    private Command ADD_COMMAND;
	private Command EDIT_COMMAND;
	private Command VIEW_COMMAND;
	private Command DELETE_COMMAND;
	private Command ABOUT_COMMAND;
	//private Command commandOK;
	
	private Vector items;
	private static Image 	iconFeed = SResources.getImage(
			SResources.IMG_FEEDLIST);
	
    //contructor	
    public RssFeedList(String title, GUIController control,Vector vec){
    	super(title, List.IMPLICIT);
    	    	
    	controller = control;
    	this.setCommandListener(new RssFeedListListener());
    	this.items = vec;
    	
    	EXIT_COMMAND  	= new Command(
				String.valueOf(SResources.getChars(
						SResources.TXT_T_MENU_COMMAND_QUIT))
				,Command.EXIT,1);
    	VIEW_COMMAND	= new Command(String.valueOf(SResources.getChars(
				SResources.TXT_T_MENU_COMMAND_READRSSFEED)),Command.ITEM,2);
    	ADD_COMMAND		= new Command(String.valueOf(SResources.getChars(
				SResources.TXT_T_MENU_COMMAND_ADDRSSFEED)),Command.ITEM,2);
    	EDIT_COMMAND	= new Command(String.valueOf(SResources.getChars(
				SResources.TXT_T_MENU_COMMAND_EDITRSSFEED)),Command.ITEM,2);
    	DELETE_COMMAND	= new Command(String.valueOf(SResources.getChars(
				SResources.TXT_T_MENU_COMMAND_DELETERSSFEED)),Command.ITEM,2);
    	ABOUT_COMMAND	= new Command(String.valueOf(SResources.getChars(
				SResources.TXT_T_MENU_COMMAND_ABOUTME)),Command.ITEM,2);
    	
    	this.addCommand(EXIT_COMMAND);
    	this.addCommand(VIEW_COMMAND);
    	this.addCommand(ADD_COMMAND);
    	this.addCommand(EDIT_COMMAND);
    	this.addCommand(DELETE_COMMAND);
    	this.addCommand(ABOUT_COMMAND);
		
		
		/*this.append(
				String.valueOf(SResources.getChars(
						SResources.TXT_T_MENU_COMMAND_READRSSFEED))
						, iconFeed);
		this.append(
				String.valueOf(SResources.getChars(
						SResources.TXT_T_MENU_COMMAND_ADDRSSFEED))
						, iconFeed);
		this.append(
				String.valueOf(SResources.getChars(
						SResources.TXT_T_MENU_COMMAND_EDITRSSFEED))
						, iconFeed);
		this.append(
				String.valueOf(SResources.getChars(
						SResources.TXT_T_MENU_COMMAND_DELETERSSFEED))
						, iconFeed);
		this.append(
				String.valueOf(SResources.getChars(
						SResources.TXT_T_MENU_COMMAND_ABOUTME))
						, iconFeed);
		this.append(
				String.valueOf(SResources.getChars(
						SResources.TXT_T_MENU_COMMAND_QUIT))
						, iconFeed);*/
    	
    	if(vec != null&&vec.size()>0){
    		RssFeed item = null;
    		for(int i=0;i<vec.size();i++){
				item = (RssFeed)vec.elementAt(i);
    			this.append(item.getName(), iconFeed);
    		}
    	}

    }
    
    public void refresh(Vector vec){
        this.deleteAll();
        this.items = vec;
    	if(vec!=null&&vec.size() > 0){
			RssFeed item = null;
    		for(int i = 0;i < vec.size();i++){
				item = (RssFeed)vec.elementAt(i);
    			this.append("  " + item.getName(), iconFeed);
    		}
    	}
    }
    
    public void add(RssItem item){
        this.append(item.getTitle(), iconFeed);
    }
	
	/* 
	 * 由于MIDP 2.0中才定义了List的deleteAll()方法,
	 * 但是MIDP1.0中List支持delete(int itemNum).
	 * 所以在MIDP1.0中,可以使用List的size()得到当前List中的Item的数量,
	 * 然后使用for循环delete(int itemNum),这样在MIDP1.0中实现deleteAll的功能。
	 */
	private synchronized void delete(){
		System.out.println("!-- Enter RssFeedList::deleteAll --!");
		for(int i = 0;i < this.size();i++){
			this.delete(i);
		}
	}
    
	/*
     * 内部监听器，监听器监听所有Command事件，并把事件响应推出来让控制器处理
     */
    private class RssFeedListListener implements CommandListener{ 
    	public void commandAction(Command command, Displayable disp){
    			if(command==EXIT_COMMAND){
    				controller.handleEvent(GUIController.EventID.EVENT_EXIT,null);
    	        }else if(command == VIEW_COMMAND || (command == List.SELECT_COMMAND)){
    	            int ind=((List)disp).getSelectedIndex();
    	            if(ind==-1)
    	                return;
    				Object[] args={items.elementAt(ind)};
    				controller.handleEvent(GUIController.EventID.EVENT_VIEW_DETAIL,args);
    			}else if(command==ADD_COMMAND){
    				controller.handleEvent(GUIController.EventID.EVENT_NEW_RECORD,null);
    			}else if(command==EDIT_COMMAND){
    	            int ind=((List)disp).getSelectedIndex();
    	            if(ind==-1)
    	                return;
    				Object[] args={items.elementAt(ind)};    		
    				controller.handleEvent(GUIController.EventID.EVENT_EDIT,args);
    			}else if(command==DELETE_COMMAND){
    	            int ind=((List)disp).getSelectedIndex();
    	            if(ind==-1)
    	                return;
    				Object[] args={items.elementAt(ind)};
    				controller.handleEvent(GUIController.EventID.EVENT_DELETE,args);
    			}else if(command==ABOUT_COMMAND){
    			    controller.handleEvent(GUIController.EventID.EVENT_ABOUT,null);
    			}
    	}
    }
}
